Skip to main content

05 中断

中断向量表 NVIC中断控制器 中断优先级

up的视频讲解: https://space.bilibili.com/1455872040

1 🌟中断简介​

图片

什么是中断呢?举一个生活中的例子:小时候放学回家 计划表上安排的是先写完作业然后吃饭,但今天写到一半的时候 你妈妈突然叫你吃饭了,很显然你会放下手上的作业 跑去吃饭 吃完饭你又会 回来 把剩下的作业接着写完

吃饭这件事并不是按我们计划安排好的进行,而是由吃饭这件事 主动打断 我们 ,让我们放下手上的作业 转而去处理吃饭这件更紧急的事情

这就是一个 中断的过程

2 🎛️NVIC中断控制器​

图片

NVIC(Nested Vectored Interrupt Controller): 嵌套向量中断控制器, 它就是整个中断的控制中心

  • 芯片中的这些外设都会通过 专属的中断线连接NVIC

  • NVIC对每个中断线都有具体的IRQ编号,当这些外设向NVIC发出中断请求的时候,NVIC首先会先对中断使能 以及 中断优先级进行判定

  • 当决定打断CPU后 NVIC会把这个IRQ编号给到CPU,然后CPU就会去一个叫 中断向量表 的地方,根据这个IRQ编号找到对应的向量

  • 然后CPU拿到中断处理函数的地址 就会把它交给PC寄存器,接着PC指针就根据这个地址 找到中断处理函数的程序,然后 CPU就跳转过去处理中断函数里的指令

中断向量
  • 中断向量表里的向量也就是一个存储空间的地址 这个存储空间里存放的是 中断处理函数的地址

  • 所以说 我们在编译程序的时候,编译器就会把 中断处理函数的地址 放到这个向量对应的存储空间里面

3 📊中断优先级​

图片

STM32中断优先级基本概念:

  • 抢占优先级(Preemption)

    高抢占优先级可以打断正在执行的低抢占优先级中断,实现中断嵌套

  • 响应优先级(Subpriority)

    抢占优先级相同时,响应优先级高的先执行;不能互相打断

  • 自然优先级

    由芯片硬件固定,对应中断向量表中的中断号(IRQn),编号越小优先级越高,软件不可改

优先级规则
  • 优先级数值规则 无论抢占还是响应,数值越小,优先级越高(0 最高)

  • 同级仲裁规则 抢占优先级、响应优先级都相同时,自然优先级越高,先执行

4 4️⃣中断处理四步​

图片
  1. 中断请求
  • 外设(按键、定时器、串口、ADC 等)满足触发条件后,向 NVIC 发送中断请求信号
  1. 中断响应
  • 暂停当前正在执行的主程序

  • 把当前寄存器、程序地址等现场数据压栈保存

  • 按照NVIC向量表地址, 跳转到对应中断的入口地址

  1. 中断处理
  • CPU 执行专门用来处理该事件的代码,这段代码叫做中断服务函数。
  1. 中断返回
  • 中断任务执行完毕后

  • 将之前保存的寄存器、断点地址出栈恢复

  • CPU 回到被打断的主程序位置,继续往下执行

中断与事件的区别
  • 中断(Interrupt):

    • 中断是CPU打断开正在执行的程序, 去执行中断程序

    • 进入NVIC,有相应的中断服务函数,需要CPU处理

  • 事件(Event)

    • 事件不强制打断CPU的运行, 只发出通知信号,一般用于外设之间的配合

    • 不进入NVIC,仅用内部硬件自动控制,TIM,DMA,ADC等

✅中断配置的三个检查点​

先有外设事件,再使能外设的中断请求,最后在NVIC允许该IRQ进入CPU。只设置优先级不会自动开启中断,只有NVIC开了、外设未开也不会进入回调。

优先级数值越小,通常越紧急;抢占优先级决定能否打断正在运行的中断,子优先级用于同抢占级的挂起请求排序。分组应在工程中统一,不能每初始化一个模块就换一套。

中断中只做必要工作,例如读取数据、清标志、登记事件。串口打印、屏幕刷新和长延时交回主循环。用计数器观察进入次数,比在回调里反复打印更不容易改变时序。